[レポート]AWS Nitro Enclavesを使用した非管理型ブロックチェーンウォレット #AWSreInvent #BLC401
こんにちは、臼田です。
みなさん、機密性の高いアプリケーション構築してますか?(挨拶
今回はAWS re:Invent 2024で行われた「BLC401 | Non-custodial blockchain wallets with AWS Nitro Enclaves」のセッションレポートです。
セッション概要
BLC401 | Non-custodial blockchain wallets with AWS Nitro Enclaves
This Web3 workshop offers a hands-on approach to creating robust, user-friendly cryptocurrency wallets with enhanced functionality and reduced complexity. Learn how to build a non-custodial blockchain wallet using AWS Nitro Enclaves. Discover how to maintain user control over keys and funds while using a backend signing service. Explore how enclave-based solutions can simplify client-side operations and enable advanced features like social recovery, all while preserving user privacy and security. You must bring your laptop to participate.
BLC401 | AWS Nitro Enclaves を使用した非管理型ブロックチェーン ウォレット
この Web3 ワークショップでは、機能が強化され、複雑さが軽減された、堅牢でユーザー フレンドリーな暗号通貨ウォレットを作成する実践的なアプローチを提供します。AWS Nitro Enclaves を使用して非管理型ブロックチェーン ウォレットを構築する方法を学びます。バックエンド署名サービスを使用しながら、キーと資金に対するユーザー コントロールを維持する方法を学びます。エンクレーブベースのソリューションによって、クライアント側の操作が簡素化され、ソーシャル リカバリなどの高度な機能が有効になり、ユーザーのプライバシーとセキュリティが保護される方法を学びます。参加するには、ラップトップを持参する必要があります。
レポート
このワークショップではAWS Nitro Enclavesを利用して非管理型ブロックチェーンウォレット(Non-custodial blockchain wallets)として、マルチパーティウォレットを構成する方法を学びます。
序盤にはブロックチェーンアプリケーションを構成する中で必要となるウォレットの扱いについての説明や、マルチパーティウォレットが必要な背景などが簡単に説明されていますが、基本的にこのワークショップはブロックチェーン業界の背景をある程度理解したエンジニアが受ける前提で構成されています。
ワークショップの全体構成は以下のようになっています。
- 01 イントロダクションとワークショップ手順の概要
- 02 IDE(Cloud9設定)へのアクセス
- 03 モジュール1 - アーキテクチャとCDKデプロイメント
- 04 モジュール2 - TLS終端とアテステーション
- 暗号化アテステーションとTLS終端
- 05 モジュール3 - マルチパーティキー
- シャミアの秘密分散アルゴリズム
- 06 全体のまとめ - 復習
モジュール1ではブロックチェーンを利用したアプリケーションサービスを展開していく中で出てくる秘密鍵管理の手法について、非管理型ウォレットと管理型ウォレットの違いや、ワークショップで利用する非管理型のマルチパーティウォレットについて説明がされます。
下図はマルチパーティウォレットの簡単な図で、3つシャードを構築し、ユーザー・アプリケーション プロバイダー・信頼できるサードパーティがそれぞれ所持をするという内容を説明しています。
マルチパーティウォレットを構成するにはいくつかアプローチがあり、ワークショップ内ではシャミアの秘密分散法(Shamir's secret sharing, 略してSSS)を用いますが、これはシンプルであり理解しやすくするためのもので本番利用は非推奨です。
代わりに実環境では、キーマテリアルを保有するエンティティがキーマテリアルを再構成/結合することなく署名できるマルチパーティ計算 (MPC) プロトコルが推奨されています。詳細は以下参考情報が提示されています。
- Fireblocks のmpc-lib
- 論文「暗号通貨のための識別可能な中止を備えた効率的な 1 ラウンドしきい値 ECDSA」
ワークショップで展開する全体のアーキテクチャは以下のようになっています。
そして、AWS Nitro Enclavesに関連する処理の詳細アーキテクチャは以下のとおりです。
このアーキテクチャの詳細は以下のとおりです。
- アーキテクチャコンポーネントの概要
- EC2インスタンス側(左):
- gvproxy: vsockを介してTCP接続を管理するプロキシコンポーネント
- watchdog: エンクレーブの起動と正常性を監視するSystemdサービス
- imds-proxy: エンクレーブからのメタデータサービス(169.254.169.254)呼び出しを転送するSystemdサービス。これによりエンクレーブがIMDS認証情報を取得可能
- Nitro Enclave側(右):
- TAPインターフェース(tap0): gvproxyと連携し、エンクレーブ内のトラフィックルーティングを可能にする完全なネットワークインターフェース
- imds proxy: 親EC2インスタンスのメタデータサービスから認証情報を取得するためのプロキシ
- nitriding-daemon: HTTPS接続の終端処理を行い、/app*パスへのリクエストをsss appのHTTPリスナーに転送
- sss app: boto3を使用してAWSサービス(KMS、DynamoDB等)と通信し、Shamir秘密分散による鍵管理と署名機能を提供
- Nitro Secure Module: /dev/nsmを通じて乱数生成機能を提供し、アテステーション用の鍵ペアをAWS管理下で制御
- EC2インスタンス側(左):
- 起動シーケンス
- EC2インスタンス側:
- user-dataの実行
- ECSからgvproxyとenclaveのDockerコンテナをプル
- S3からwatchdogとimds-proxyのsystemd定義を取得
- EnclaveのDockerコンテナをEnclaveファイルに変換
- systemdサービスを起動し、watchdogがエンクレーブを開始
- gvproxyコンテナを起動・設定
- Nitro Enclave側:
- imds proxyが起動し、127.0.0.1でメタデータリクエストをリッスン
- nitriding-daemonが起動し、tap0インターフェースを作成、自己署名TLS証明書を生成
- sss appが起動し、KMS用の一時的な鍵ペアを生成、公開鍵ハッシュをnitriding-daemonに通知
- nitriding-daemonがsss appの準備完了を確認し、リクエスト処理を開始
- EC2インスタンス側:
このワークショップではAWS CDKを利用して展開していきます。環境の構築にはaws-samples/aws-nitro-enclave-blockchain-walletが利用されますが、このリポジトリにあるハンズオン手順とは別のものが展開されます。
最終的にAWS Nitro Enclaves内での安全な実行環境の確保、TLSによるエンドツーエンドの暗号化、シャミアの秘密分散法による3-of-2マルチシグの実装やリカバリ手法について学べました。
まとめ
AWS Nitro Enclavesを利用して非管理型ブロックチェーンウォレットとしてマルチパーティウォレットを構築し運用する方法が学べるワークショップでした。
途中のSSSなどはシンプルに理解するために用いられていますが、構成する要素や実際の手順はかなり細かく具体的な内容まで踏み込んでいるため全体を理解できるようになるのは大変そうなワークショップでした。